/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Utils.encriptaCadenas;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.faces.model.SelectItem;

/**
 *
 * @author HNCR
 */
public class Usuario implements Serializable{
    private int cod_usuario;
    private String usuario;
    private String clave;
    private TipoUsuario objTipoUsuario=new TipoUsuario();
    private Trabajador objTrabajador=new Trabajador();
    private int estado;

    public Usuario() {
    }

    public int getCod_usuario() {
        return cod_usuario;
    }

    public void setCod_usuario(int cod_usuario) {
        this.cod_usuario = cod_usuario;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

    public TipoUsuario getObjTipoUsuario() {
        return objTipoUsuario;
    }

    public void setObjTipoUsuario(TipoUsuario objTipoUsuario) {
        this.objTipoUsuario = objTipoUsuario;
    }

    public Trabajador getObjTrabajador() {
        return objTrabajador;
    }

    public void setObjTrabajador(Trabajador objTrabajador) {
        this.objTrabajador = objTrabajador;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }
    
    //==========================================================================
    //-----registro
    public static boolean crearUsuario (Usuario a)
    {
        boolean estado = false ;
        Connection conexion=null;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {CALL sp_usuario_crear "
                     +"(?,?,?,?)} ");
             st.setString(1,a.getObjTrabajador().getCod_trabajador());
             st.setString(2, encriptaCadenas.getStringMessageDigest(a.getClave(),encriptaCadenas.MD5));//encripta clave antes de enviar
             st.setInt(3,a.getObjTipoUsuario().getCod_tipo_usuario()); 
             st.registerOutParameter(4,java.sql.Types.VARCHAR);
             st.execute();
             a.setUsuario(st.getString(4));
             if(a.getUsuario()!=null)
             {
               estado=true;
                }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    }
    
    /*
     * combo 
     */
    public ArrayList<SelectItem>getCargarComboUsario(){         
    ArrayList<SelectItem> arrayNivel = new ArrayList<SelectItem>();
    Connection conexion = null;
    ResultSet rs = null;
    try{
    conexion = ControladorBD.darConexionBD();
    CallableStatement st = conexion.prepareCall( "{CALL sp_usuario_combo()}");    
    rs = st.executeQuery();        
    if (rs.next()){    
      do{
        arrayNivel.add(new SelectItem(rs.getString("cod_usuario"), 
                rs.getString("usuario")));              
      } while (rs.next());
    }  
         rs.close();
         st.close();
         conexion.close();

     }catch(Exception error){
        System.out.println("Error en el metodo por: " +
                   error.getMessage());
                error.printStackTrace();
        }    
      
    return arrayNivel;
    } 
    
    
    //--------muestra el usuario previo --aun NO registrado
    public static String getVerUsuario(String usuario){
     String arreglo=null;
     ResultSet rs=null;
        Connection conexion = null;
        try{
           conexion = ControladorBD.darConexionBD();
           conexion.setAutoCommit(false);
           conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall( "{CALL sp_usuario_ver_mi_usuario(?)}");
            st.setString(1, usuario);
            rs = st.executeQuery();
            if (rs.next()){
                  
                do{                                             
                        arreglo=(rs.getString("usuario"));                        
                }while (rs.next());
            }
            st.close();
            conexion.setAutoCommit(true);
            conexion.close();
        }catch(Exception error){
            System.out.println("Error en el metodo por: " + error.getMessage());
            error.printStackTrace();
        }
        return arreglo;

    }
    
}
